#include <malloc.h>
#include <iostream>
using namespace std;

void change(int i)
{
    i = 100;
}

void change1(int &i)
{
    i = 100;
}

void change2(int *p)
{
    *p = 100;
}

void change3(int *&p)
{
    p = (int *)malloc(sizeof(int));
    *p = 10000;
}

void newInt(int *&p)
{
    p = (int *)malloc(sizeof(int));
    
}
 void newInt1(int *p)
{
    p = (int *)malloc(sizeof(int));
    
}
void newInt2(int **pp)
{
    *pp = (int *)malloc(sizeof(int));
    
}
int main()
{
    int x = 10;
    change(x);
    cout << x << endl;
    change1(x);
    cout << x << endl;

    cout << "------------------" << endl;
    x = 10;
    int *p = &x;
    change2(p); // 把x传给函数的参数
    cout << x << endl;
    change3(p);
    cout << *p << endl;
    cout << x << endl;

    int * p1;
    newInt(p1);//在函数的内部给p1分配了一片整数的空间，相当于代码p1 = (int*)malloc(sizeof(int));
    *p1 = 1000;

    int * p1;
    newInt1(p1);//错误，因为函数内的p与p1是一个传值关系，里面的p改变不会影响到外面的p1
    *p1 = 1000;

    int *p1;
    newInt2(&p1); // 把p1的地址传给函数的参数pp，这个也就是C语言中的参数传址
    *p1 = 1000;

    return 0;
}
